package 泛型;

import java.util.Comparator;
import java.util.TreeSet;

public class 通配符下限 {
//    TreeSet中使用的是下限通配符
//        public TreeSet(Comparator<? super E> comparator) {
//        this(new TreeMap<>(comparator));
//    }
//    所以这里可以传入比较器1和比较器2
    public static void main(String[] args) {
        TreeSet<猫科> treeSet = new TreeSet<>(new 比较器2());
        TreeSet<猫科> treeSet1 = new TreeSet<>(new 比较器1());
//        由于是下限通配符,所以这里不能传入猫科的子类比较器
//        TreeSet<猫科> treeSet2 = new TreeSet<>(new 比较器3());
        treeSet.add(new 猫科(1));
        treeSet.add(new 猫科(2));
        System.out.println(treeSet);

    }
}
class 比较器1 implements Comparator<动物> {

    @Override
    public int compare(动物 o1, 动物 o2) {
        return o1.name.compareTo(o2.name);
    }
}

class 比较器3 implements Comparator<美短> {

    @Override
    public int compare(美短 o1, 美短 o2) {
        return o1.level - o2.level;
    }
}

class 比较器2 implements Comparator<猫科> {

    @Override
    public int compare(猫科 o1, 猫科 o2) {
        return o1.age - o2.age;
    }
}
